﻿using System;
using System.Collections.Generic;

namespace AlgorytmyGenetyczne.Operatory
{
    public class Mutacja : IOperator
    {
        public double Prawdopodobienstwo { get; set; }
        private readonly Random losowanie;

        public Mutacja(double prawdopodobienstwo)
        {
            this.Prawdopodobienstwo = prawdopodobienstwo;
            losowanie = new Random();
        }

        public Mutacja()
        {
            Prawdopodobienstwo = 0.01;
            losowanie = new Random();
        }


        public Populacja wykonaj(Populacja populacja)
        {
            List<Osobnik> osobnicy = populacja.Osobnicy;
            bool[] geny;
            foreach (Osobnik osobnik in osobnicy)
            {
                geny = osobnik.Genotyp.Geny;
                for (int i = 0; i < geny.Length; i++ )
                {
                    if (losowanie.NextDouble() < Prawdopodobienstwo)
                    {
                        geny[i] = !geny[i];
                    }
                }
                
            }
            return populacja;
        }
    }
}
